# student:xingqian
# week07————列表

# 官方：docs.python.org/3/library/index.html——sequence types（序列类型）

# 上周回顾：
# 一、取值 --> 1.index 索引取单个值
#            2.slice 切片取一些值，还是一个列表
# 列表中索引的值就是0123等的排序
# 序列是有顺序的值—— 1.有索引；2.有值

# 文本/字符串序列
# names = "Alex,Marry,Jack"
# #      01234...
# print(names[0:4])

# 列表序列
names_list = ["Alex","Marry","Jack"]
# #              0      1       2
print(names_list[0])

# 本周知识点
# 二、列表增加
# 列表的方法会改变列表本身

names = ["Mike","Mary","Jan","Jack"]

# 2.1 append() 增加元素到list的末位
# names.append("zhichao")
# print(names)
#
# append() 一般用来新建列表会使用
# 可以在数据源中提取想要的数据，利用for循环
# object一切都有对象（列表、字符串、数值等）
# 列表什么都可以加，但是建议内容是相同的类型，所以都写字符串
# names_J = []
# for i in names:
#     if i[0] == "J":
#         names_J.append(i)
# print("names_J=",names_J)

# 2.2 insert() 插入元素  --> 取一个索引值和一个对象
# 按照某规则，插入到某位置（不能插到列表末尾,因为是append的工作）
# "2"为索引值
# names.insert(2,"Lihua")    # 在索引为2的位置上插入'lihua'
# print("插入lihua后的names:",names)
#

# 3.删除/移除
# 3.1 remove() 使用remove之前，应该先判断该元素是否在该list中
#              会从列表中删除指定数据值的第一次出现
# nums = [1,2,3,4]
# nums.remove(3)         # 先知道想要删除对象的值为3
# nums
#
# x in s： 如果s中的一项等于x，则输出 True;否则为 false
# print("Jan" in names)
#
# remove删除步骤：要先找到所要删除的位置，再用remove删除（删单个有优势）
# 删除用户输入的内容
# names_user = input("删除内容：")
# while True:
#     if names_user in names:
#         names.remove(names_user)
#     else:
#         names.append(username)
# print("remove之后的names:",names)
#
# 3.2 pop() 删除  pop()不填内容 ==> 删除末位（删多个有优势）
# nums = [1,2,3,4]
# nums.pop()
#
# 提供索引值，则会删除和返回对应位置的对象
# names.pop(2)        # 从特定索引值来删除一个对象
# print(names)
#
# 3.3 案例： 删除一些具有特征的索引值
# len(names)-1 = 3  range(0,3,2)-->0,2  索引0对应的值为Mike 2对应的值是Jan
# for i in range(0,len(names)-1,2):
#     names.pop(i)
# print(names)

# 4.index() 找出索引值
# print(names.index("Jan"))

# 5.sort()排序
stu_成绩 = [97,95,93,95,92,96,92,95,100]
#
# 5.1 默认从小到大排序 默认 reverse = False
# stu_成绩.sort()
# print(stu_成绩)
#
# 5.2 从大到小排序  reverse = True
# stu_成绩.sort(reverse = True)
# print(stu_成绩)
#
# 5.3 字符串 以首字母按照ASCII编码表顺序排序
# names.sort()
# print(names)

# 6.count() 查看某元素在列表出现的次数
# print(stu_成绩.count(95))

# 7.clear() 清空list
# names.clear()
# print(names)

# 8.extend() 取出一个对象列表-->把两个列表拼接在一起
#            有顺序的，操作哪一个列表，哪一个列表先写
names.extend(stu_成绩)        # 操作names，则names先写
print(names)

# 9.要先了解list的长度？seq 一般方法 len()
# print(len(names))

# 10.列表复制
# 如果想让另一个变量引用一个现有列表，可以使用赋值符=
# 如果想建立现有列表的副本，用它们初始化一个列表，就要使用cope函数
#
# ？误区：
# 使用赋值操作符不能把一个列表复制到另一个列表
# first = [1,2,3,4,5]
# second = first
# second.append(6)
# print(second)
# print(first)        # 此时发现修改一个列表，另一个也会发生改变
#
# # 列表复制
# 1. 方法一：copy()
# names = ["Mike","Mary","Jan","Jack"]
# names_源文件 = names.copy()
# names.append("John")
# print("names =",names)                     # names_源文件没有发生变化
# print("names_源文件 =",names_源文件)
#
# 2.方法二：切片[:]（可以取出所有值）
names = ["Mike","Mary","Jan","Jack"]
names_源文件 = names[:]     # 切片，没有写索引即为全部
names.append("John")
print("names =",names)
print("name_源文件 =",names_源文件)

